package com.ityxh.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@TableName("driver")
@EqualsAndHashCode(callSuper = true)
//@ApiModel(value = "车主")
public class Driver extends Model<Driver> {
    private static final long serialVersionUID = 1L;

    /**
     * 用户id
     */
  //  @ApiModelProperty(value = "用户id")
    private String accountId;

    /**
     * 用户名
     */
  //  @ApiModelProperty(value = "用户名")
    private String accountName;

    /**
     * 企业id
     */
  //  @ApiModelProperty(value = "企业id")
    private String companyId;

    /**
     * 省编码
     */
  //  @ApiModelProperty(value = "省编码")
    private String provinceCode;
    /**
     * 省名称
     */
  //  @ApiModelProperty(value = "省名称")
    private String provinceName;
    /**
     * 市编码
     */
  //  @ApiModelProperty(value = "市编码")
    private String cityCode;
    /**
     * 市名称
     */
  //  @ApiModelProperty(value = "市名称")
    private String cityName;
    /**
     * 区编码
     */
  //  @ApiModelProperty(value = "区编码")
    private String countyCode;
    /**
     * 区名称
     */
  //  @ApiModelProperty(value = "区名称")
    private String countyName;
    /**
     * 详细地址
     */
  //  @ApiModelProperty(value = "详细地址")
    private String detailAddress;
    /**
     * 经度
     */
  //  @ApiModelProperty(value = "经度")
    private BigDecimal longitude;
    /**
     * 纬度
     */
  //  @ApiModelProperty(value = "纬度")
    private BigDecimal latitude;
    /**
     * 身份证证件表id
     */
  //  @ApiModelProperty(value = "身份证证件表id")
    private String idCertificateId;
    /**
     * 身份证号码
     */
  //  @ApiModelProperty(value = "身份证号码")
    //@Sensitive(type = SensitiveTypeEnum.ID_CARD)
    private String idCardNo;
    public void setIdCardNo(String idCardNo) {
        if(StringUtils.isNotBlank(idCardNo) && idCardNo.contains("*")){
            idCardNo = null;
        }
        this.idCardNo = idCardNo;
    }
    /**
     * 真实姓名
     */
  //  @ApiModelProperty(value = "真实姓名")
    private String realName;
    /**
     * 手机号
     */
  //  @ApiModelProperty(value = "手机号")
    private String phone;
    public void setPhone(String phone) {
        if(StringUtils.isNotBlank(phone) && phone.contains("*")){
            phone = null;
        }
        this.phone = phone;
    }
    /**
     * 驾驶证证件表id
     */
  //  @ApiModelProperty(value = "驾驶证证件表id")
    private String drivingCertificateId;
    /**
     * 驾驶证初次领证时间
     */
  //  @ApiModelProperty(value = "驾驶证初次领证时间")
    private LocalDate drivingFirstTime;
    /**
     * 驾驶证开始时间
     */
  //  @ApiModelProperty(value = "驾驶证开始时间")
    private LocalDate drivingValidStartTime;
    /**
     * 驾驶证结束时间
     */
  //  @ApiModelProperty(value = "驾驶证结束时间")
    private LocalDate drivingValidEndTime;
    /**
     * 车主状态
     */
  //  @ApiModelProperty(value = "车主状态")
    private String driverStatus;
    /**
     * 车辆服务总里程 米
     */
  //  @ApiModelProperty(value = "车辆服务总里程")
    private BigDecimal servicedTotalDistance;
    /**
     * 车辆服务总时长 秒
     */
  //  @ApiModelProperty(value = "车辆服务总时长")
    private BigDecimal servicedTotalPeriod;
    /**
     * 服务单数
     */
  //  @ApiModelProperty(value = "服务单数")
    private Long serviceCount;
    /**
     * 车主出车状态
     */
  //  @ApiModelProperty(value = "车主出车状态 默认不出车")
    private String driverOut;

    /**
     * 车主出车具体情况 白班、夜班、全天、不出车
     */
  //  @ApiModelProperty(value = "车主出车具体情况 白班、夜班、全天、不出车")
    private String driverOutInfo;

    /**
     * 车主出车反馈时间
     */
  //  @ApiModelProperty(value = "车主出车反馈时间")
    private LocalDateTime driverOutFeedbackTime;

    /**
     * 二审
     * 审核状态 0未审核 1审核通过 2审核不通过
     */
  //  @ApiModelProperty(value = "审核状态 0未审核 1审核通过 2审核不通过")
    private String secondAuditStatus;
    /**
     * 二审
     * 审核拒绝理由
     */
  //  @ApiModelProperty(value = "审核拒绝理由")
    private String secondAuditReason;
    /**
     * 二审
     * 审核时间
     */
  //  @ApiModelProperty(value = "审核时间")
    private LocalDateTime secondAuditTime;
    /**
     * 二审
     * 审核人姓名
     */
  //  @ApiModelProperty(value = "审核人姓名")
    private String secondAuditName;

    /**
     * 车管身份id
     */
  //  @ApiModelProperty(value = "车管身份id")
    private String captainIdentityId;

    /**
     * 所属车队-车管-车管身份id
     */
  //  @ApiModelProperty(value = "所属车队-车管-车管身份id")
    private String leaderCaptainIdentityId;

    /**
     * 所属车队-车管-车管车主身份id
     */
  //  @ApiModelProperty(value = "所属车队-车管-车管车主身份id")
    private String leaderDriverId;
    /**
     * 所属车队-车管-车管用户id
     */
  //  @ApiModelProperty(value = "所属车队-车管-车管用户id")
    private String leaderDriverAccountId;
    /**
     * 车载设备pn
     */
  //  @ApiModelProperty(value = "车载设备pn")
    private String pn;
    /**
     * 高德设备
     */
  //  @ApiModelProperty(value = "高德设备")
    private String gdNo;
    /**
     * 车主油卡
     */
  //  @ApiModelProperty(value = "车主油卡")
    private String oilCard;
    /**
     * 加入车队时间
     */
  //  @ApiModelProperty(value = "加入车队时间")
    private LocalDateTime addLeaderTeamTime;
    /**
     * 车机快递单号
     */
  //  @ApiModelProperty(value = "车机快递单号")
    private String courierNumber;
    /**
     * 伪车机号
     */
  //  @ApiModelProperty(value = "伪车机号")
    private String pnSpare;
    /**
     * 绑定人
     */
  //  @ApiModelProperty(value = "绑定人")
    private String bindUser;
    /**
     * 绑定时间
     */
  //  @ApiModelProperty(value = "绑定时间")
    private LocalDateTime bindTime;
    /**
     * 限制租车订单号已完成数量
     */
  //  @ApiModelProperty(value = "限制租车订单号已完成数量")
    private Long orderLimitNum;
    /**
     * 是否解绑过车机
     */
  //  @ApiModelProperty(value = "是否解绑过车机")
    private String unbinding;
    /**
     * 标注
     */
  //  @ApiModelProperty(value = "标注")
    private String tagging;
    /**
     * 所属车管名称
     */
  //  @ApiModelProperty(value = "所属车管名称")
    @TableField(exist = false)
    private String leaderName;
    /**
     * 身份证有效期
     */
  //  @ApiModelProperty(value = "身份证有效期")
    private String idCardExpireType;
    /**
     * 驾驶证有效期
     */
  //  @ApiModelProperty(value = "驾驶证有效期")
    private String licenseExpireType;
    /**
     * 保险有效期
     */
  //  @ApiModelProperty(value = "保险有效期")
    private String insuranceExpireType;

    /**
     * 车主身份类型 driver【默认】、engineerDriver
     */
  //  @ApiModelProperty(value = "车主身份类型")
    private String driverIdentityType;

    /**
     * 收款方式 本人-oneself 他人-others
     */
  //  @ApiModelProperty(value = "收款方式")
    private String paymentMethod;

    /**
     * 违规次数
     */
  //  @ApiModelProperty(value = "违规次数")
    private Integer violationNum;

    /**
     * 车牌号
     */
  //  @ApiModelProperty(value = "车牌号")
    @TableField(exist = false)
    private String carNumber;

    /**
     * 默认车 车架号
     */
  //  @ApiModelProperty(value = "默认车 车架号")
    @TableField(exist = false)
    private String vin;


    /**
     * 姓名(搜索条件)
     */
    @TableField(exist = false)
    public String searchName;
    /**
     * 手机号(搜索条件)
     */
    @TableField(exist = false)
    public String searchMobile;
    /**
     * 省(搜索条件)
     */
    @TableField(exist = false)
    public String searchProvince;
    /**
     * 市(搜索条件)
     */
    @TableField(exist = false)
    public String searchCity;
    /**
     * 区(搜索条件)
     */
    @TableField(exist = false)
    public String searchCounty;

    /**
     * 项目id
     */
  //  @ApiModelProperty(value = "项目id")
    @TableField(exist = false)
    private String projectId;

    /**
     * 查询类型 added-已加入项目的车主 notAdded-未加入项目的车主
     */
  //  @ApiModelProperty(value = "查询类型")
    @TableField(exist = false)
    private String queryType;


    public void setDriverOut(String driverOut) {
        this.driverOut = driverOut;
        this.driverOutFeedbackTime = LocalDateTime.now();
    }

    public static final String QUERY_TYPE_ADDED_PROJECT = "added";

    public static final String QUERY_TYPE_NOT_ADDED_PROJECT = "notAdded";


    /**
     * 创建时间
     */
  //  @ApiModelProperty(value="创建时间")
    private LocalDateTime createTime;

    /**
     * 创建人account
     */
  //  @ApiModelProperty(value="创建人account")
    private String createUser;

    /**
     * 最后一次更新时间
     */
  //  @ApiModelProperty(value="最后一次更新时间")
    private LocalDateTime updateTime;

    /**
     * 最后一次更新用户account
     */
  //  @ApiModelProperty(value="最后一次更新用户account")
    private String updateUser;

    /**
     * 是否删除(0:否;1:是)
     */
  //  @ApiModelProperty(value="是否删除(0:否;1:是)")
    private String delFlag;

    /**
     * 所属租户
     */
  //  @ApiModelProperty(value="所属租户",hidden=true)
    private Integer tenantId;

    /**
     * 是否禁用 0 否 1 是
     */
  //  @ApiModelProperty(value="是否禁用 0 否 1 是")
    private String forbidden;
}
